from manim import *
# 欢迎观看角的定义和表示方法的动画。
# 首先，我们创建一个点，这是角的顶点。我们将这个点命名为B。
# 接下来，我们从这个顶点出发，画出两条射线。第一条射线从B点向右延伸，我们将其终点命名为A。第二条射线从B点向上延伸，我们将其终点命名为C。
# 现在，我们可以看到一个角形成了。这个角由射线BA和射线BC组成。我们用数学符号表示这个角为“角ABC”。
# 这个角的度量是90度。我们用数学符号表示为“90度”。
# 角的表示方法有很多种。除了用三个字母表示外，我们还可以用顶点的字母单独表示这个角。比如，我们可以简单地用“角B”来表示。
# 除了用度数表示角的大小，我们还可以用弧度表示。这个90度的角等于“π/2”弧度。
class AngleConcept(Scene):
    def construct(self):
        # 创建一个角
        dot = Dot(ORIGIN)
        line1 = Line(ORIGIN, RIGHT*3, color=BLUE)
        line2 = Line(ORIGIN, UP*3, color=BLUE)
        angle = Angle(line1, line2, radius=0.5, other_angle=False)

        # 角的表示
        angle_label = MathTex(r"\angle ABC").next_to(angle, UP + RIGHT)
        A = MathTex("A").next_to(line1.get_end(), DOWN)
        B = MathTex("B").next_to(dot, LEFT)
        C = MathTex("C").next_to(line2.get_end(), LEFT)

        # 角度的度量
        degree_label = MathTex("90^\circ").next_to(angle, RIGHT)
        single_letter_label = MathTex(r"\angle B").next_to(angle, UP + RIGHT)
        radian_label = MathTex(r"\frac{\pi}{2} \text{ radians}").next_to(degree_label, DOWN)

        # 添加到场景中
        self.play(Create(dot), Write(B))
        self.wait(1)
        self.play(Create(line1), Write(A))
        self.play(Create(line2), Write(C))
        self.wait(1)
        self.play(Create(angle), Write(angle_label))
        self.wait(1)
        self.play(Write(degree_label))
        self.wait(2)
        self.play(Transform(angle_label, single_letter_label))
        self.wait(2)
        self.play(Write(radian_label))
        self.wait(2)

if __name__ == "__main__":
    scene = AngleConcept()
    scene.render()